## Registered S3 method overwritten by 'httr':
##   method         from  
##   print.response rmutil
## Warning: package 'tseries' was built under R version 4.3.2
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Warning: package 'cowplot' was built under R version 4.3.2
## Warning: package 'devtools' was built under R version 4.3.2
## Loading required package: usethis
## Warning: package 'usethis' was built under R version 4.3.2

Actividad 1

Punto A

Crear una muestra aleatoria de tamaño 120

#primero leemos el excel y lo guardamos en un data frame en este caso :
Blackfriday=data.frame(read_xlsx("./Blackfriday.xlsx"))
#Despues establecemos el tamaño de la muestra y con ese tamaño usamos la funcion sample:
n=120
muestra=sample(1:nrow(Blackfriday),size=n,replace=FALSE)
#Finalmente relacionamos nuestra muestra con los datos obtenidos del excel:
datosfinales = Blackfriday[muestra, ]
datosfinales

Punto B

Gender

datosproblema=data.frame(table(datosfinales$Gender))
datosproblema
valores= datosproblema$Freq
nombres_porcentajes=c("Mujer","Hombre")
porcentajes <- (valores / sum(valores)) * 100
colores <- c("#3498db", "#e74c3c")
plot_ly(labels = nombres_porcentajes, values = porcentajes, type = "pie",
        textinfo = "label+percent", text = datosproblema$Var1 , marker = list(colors = colores)) %>%
  layout(title = list(font="Porcentajes Entre Hombre y Mujer"),
         showlegend = FALSE,  # Ocultar la leyenda
         margin = list(l = 20, r = 0, b = 0, t = 30),  # Ajustar márgenes
         paper_bgcolor = "white",  # Fondo blanco
         plot_bgcolor = "white",  # Fondo blanco
         font = list(family = "Arial", size = 14),  # Fuente y tamaño de texto
         titlefont = list(size = 18),  # Tamaño del título
         annotations = list(text = "Fuente: Datos de ejemplo", showarrow = FALSE,
                            x = 0.8, y = -0.15))  # Nota de fuente
## Warning: The titlefont attribute is deprecated. Use title = list(font = ...)
## instead.

Al ser una variable cualitativa no podemos obtener sus medidas de tendencia central, sin embargo como se vera mas a delante la usaremos para generar grupos de datos y asi hacer su respectivo analisis

City_category

datosproblema=data.frame(table(datosfinales$City_Category))
datosproblema
valores= datosproblema$Freq
nombres_porcentajes=c("CITY A","CITY B","CITY C")
porcentajes <- (valores / sum(valores)) * 100
colores <- c("#BFCDFF", "#E4FFBF","#B8FFD9")
plot_ly(labels = nombres_porcentajes, values = datosproblema$Freq, type = "pie",
        textinfo = "label+percent", text = datosproblema$Var1 , marker = list(colors = colores)) %>%
  layout(title = list(font="Porcentajes de ciudades en la muestra"),
         showlegend = FALSE,  # Ocultar la leyenda
         margin = list(l = 20, r = 0, b = 0, t = 30),  # Ajustar márgenes
         paper_bgcolor = "white",  # Fondo blanco
         plot_bgcolor = "white",  # Fondo blanco
         font = list(family = "Arial", size = 14),  # Fuente y tamaño de texto
         titlefont = list(size = 18),  # Tamaño del título
         annotations = list(text = "Fuente: Datos de ejemplo", showarrow = FALSE,
                            x = 0.8, y = -0.15))  # Nota de fuente
## Warning: The titlefont attribute is deprecated. Use title = list(font = ...)
## instead.

income

datosproblema=datosfinales$Income
Media_Datos=median(datosproblema)
Moda=mfv(datosproblema)
Promedio=mean(datosproblema)

#hist(datosproblema)
g1 = ggplot(data = data.frame(datosproblema),mapping = aes(x = datosproblema)) +
  geom_histogram(bins = 20,colour="white",fill="#FFEA89")+
            labs(title = "Histograma income", y ="Cantidad") +
            geom_vline(aes(xintercept= Promedio ,color ="MEDIA"),linetype = "dashed",linewidth = 0.5) +
            geom_vline(aes(xintercept= Media_Datos,color = "MEDIANA"),linetype = "dashed",linewidth = 1) + 
           scale_color_manual(name = "Informacion",values = c(MEDIANA ="blue" ,MEDIA = "red",MODA ="purple"))
g1

#boxplot(datosproblema, col="#BF89FF",xlab="Habitantes",ylab="Edad")
#stripchart(datosproblema, method = "jitter", pch = 19, add = TRUE, col = "blue")

Ahora podrmos sacar las medidas de tendencia central

cat("la media de los datos es", Media_Datos)
## la media de los datos es 13197.5
cat("El promedio de los datos es",Promedio)
## El promedio de los datos es 12978.06
cat("los valores que mas se repiten o la moda es:",Moda)
## los valores que mas se repiten o la moda es: 12289 15865

Esto significa que no hay un solo dato que se repita mas veces que los demas, esa es la razon de que aparezcan varios datos como moda

Tambien podemos ver su grafico de dispercion

plot(datosproblema,col="green",xlab="Personas",ylab="Income")

Ahora bien teniendo en cuenta que las primeras dos son variables cualitativas vamos a hacer un pequeño analisis usando estas variables para agrupar los datos de la variable Income

Aca podemos ver una compraracion entre las medias de los income agrupados entre generos F Y M

MediEstado= table(datosfinales %>% group_by(Gender=Gender) %>% summarise(MediaAritmetica=mean(Income)))

barplot(MediEstado,
        main="Comparacion entre medias ingresos",          #C) Título principal     
        xlab="Agrupacion por generos",                   #D) Tíulo del eje X
        ylab="",                   #E) Título del eje Y
        legend = rownames(MediEstado),
         ylim = c(0, 1.5),
        col=c("#FFBEBE","#D7BEFF")
        )

Con la grafica enterior podemos ver que no existe una gran diferencia en la media de ingresos por generos

MedianaEstado= table(datosfinales %>% group_by(Gender=Gender) %>% summarise(MediaAritmetica=median(Income)))

barplot(MedianaEstado,
        main="Comparacion entre mediana ingresos",          #C) Título principal     
        xlab="Agrupacion por generos",                   #D) Tíulo del eje X
        ylab="",                   #E) Título del eje Y
        legend = rownames(MediEstado),
         ylim = c(0, 1.5),
        col=c("#EAFF8B","#BEFFF2")
        )

Aasi como en la compaaracion anterior podemos ver que si separamos loss daatos entre generos la diferencia es casi nula

ahora teniendo en cuenta que no hay mucha diferencia cuando se agrupa en generos intentemos agruparlos por ciudades

MediEstado= table(datosfinales %>% group_by(City_Category=City_Category) %>% summarise(MediaAritmetica=mean(Income)))

barplot(MediEstado,
        main="Comparacion entre medias ingresos",          #C) Título principal     
        xlab="Agrupacion por categoria de ciudad",                   #D) Tíulo del eje X
        ylab="",                   #E) Título del eje Y
        legend = rownames(MediEstado),
         ylim = c(0, 1.5),
        col=c("#FFBEBE","#FBFFAF","#AFFFC4")
        )

MedianEstado= table(datosfinales %>% group_by(City_Category=City_Category) %>% summarise(MediaAritmetica=median(Income)))

barplot(MedianEstado,
        main="Comparacion entre mediana ingresos",          #C) Título principal     
        xlab="Agrupacion por categoria de ciudad",                   #D) Tíulo del eje X
        ylab="",                   #E) Título del eje Y
        legend = rownames(MedianEstado),
         ylim = c(0, 1.5),
        col=c("#7B7E4E","#4E7E59","#7E4E4E")
)

Al igual que agrupandolo por generos podemos ver como al ser agrupadas por categoria de ciudad los resultados dan casi igual lo cual nos indicaria que la muestra tomada anteriormente se podria pensar que tiene una distribucion nomrla o en su defecto muy similar a una distribuvion normal ### Punto C primero cacularemos la media y desviacion estandar de la poblacion general

## La media de la poblacion es: 9508.259
## La desviacion estandar de la poblacion es: 5001.657

Ahora calcularemos la media y desviacion estandar de la muestra

## La media de la muestra  es: 9993.358
## La desviacion estandar de la muestra es: 5360.271

En situiaciones como estas el estimador es la MUESTRA, esto debido a que normalmente se desconocen todos los datos de l apoblacion, por lo cual se toma una muestra lo suficientemente grande para obtener los datos mas cercanos posibles desconociendo la totalidad de los datos de la poblacion

Ahora miraremos la probabilidad de que la variable media muestral sea mayor o igual que el valor de la poblacional.

z <- round(( mean(Blackfriday$Purchase) - mean(datosfinales$Purchase))/sd(datosfinales$Purchase),2)
probabilidad <- round(pnorm(q=z,mean = 0, sd=1,lower.tail = FALSE),1)

cat("la probabilidad de que la variable media muestral sea mayor o igual que el valor de la
poblacional es de :",(probabilidad*100),"%")
## la probabilidad de que la variable media muestral sea mayor o igual que el valor de la
## poblacional es de : 50 %

Al no haber una inclinacion muy marcada o significativa en que la media muestral sea igual o mayor que la media poblacional se considera que los segos son muy bajos por no decir inexistentes

Punto D

datosproblema=datosfinales$Purchase
Mediana_Datos=round(median(datosproblema),0)
Moda=mfv(datosproblema)
Promedio=round(mean(datosproblema),0)
sdi=round(sd(datosproblema),0)

#hist(datosproblema)
g1 = ggplot(data = data.frame(datosproblema),mapping = aes(x = datosproblema)) +
  geom_histogram(bins = 20,colour="white",fill="#FFBCFD")+
            labs(title = "Histograma variable PurchaseS", y ="Cantidad") +
            #geom_vline(aes(xintercept= Promedio ,color ="MEDIA"),linetype = "dashed",linewidth = 1) +
            #(aes(xintercept= Media_Datos,color = "MEDIANA"),linetype = "dashed",linewidth = 1) + 
           #scale_color_manual(name = "Informacion",values = c(MEDIANA ="#5DFF00" ,MEDIA = "#6E00FF")) +
          stat_function(fun = dnorm, n = 10000, args = list(mean = Promedio, sd = sdi)) + ylab("") +
  scale_y_continuous(breaks = NULL)
g1

Ahora calcularemos la courtosis :

curti=kurtosis(datosfinales$Purchase)
cat("la curtosis de la variable purchasae de la muestra aes: ",curti)
## la curtosis de la variable purchasae de la muestra aes:  3.057671

En una distribución normal, la curtosis es 3. Un valor de curtosis muy cercano a cero, como 0.0069, indica que la distribución tiene colas más ligeras en comparación con una distribución normal

Ahora calcularemos la asimetria con la funcion skewness

  datosproblema=datosfinales$Purchase
asimetria=skewness(datosproblema)
cat("la asimetria da :",asimetria)
## la asimetria da : 0.08577722

Un sesgo de 0 indica una simetría perfecta en la distribución. Un valor cercano a cero, como 0.0847, sugiere una simetría relativamente buena en la distribución. Valores cercanos a cero indican que la distribución está más cerca de ser simétrica.

plot(datosfinales$Purchase, dnorm(datosfinales$Purchase, mean = mean(datosfinales$Purchase), sd = sd(datosfinales$Purchase)), type = "l",
     ylim = c(0, 0.0001), ylab = "", lwd = 2, col = "red")

 x=dnorm(datosfinales$Purchase, mean = mean(datosfinales$Purchase), sd = sd(datosfinales$Purchase))
x
##   [1] 6.430839e-05 7.010608e-05 7.439491e-05 7.219513e-05 3.983398e-05
##   [6] 6.748213e-05 6.863038e-05 6.052117e-05 6.929327e-05 2.805713e-05
##  [11] 7.231322e-05 6.173723e-05 5.443746e-05 2.205384e-05 4.428188e-05
##  [16] 5.367712e-05 4.632793e-05 1.175436e-05 1.253379e-05 3.690165e-05
##  [21] 7.438640e-05 1.378535e-05 4.169219e-05 5.821189e-05 6.412150e-06
##  [26] 4.793309e-05 3.129848e-05 7.354869e-05 4.248024e-05 6.210657e-05
##  [31] 5.098477e-05 6.499493e-05 7.388164e-05 7.409963e-05 5.473989e-05
##  [36] 6.952545e-05 7.385240e-05 7.379268e-05 7.042612e-05 4.924722e-05
##  [41] 4.808167e-05 2.951911e-06 7.264300e-05 3.729134e-05 3.645394e-05
##  [46] 3.632982e-05 7.430901e-05 5.117260e-05 5.729111e-05 6.247404e-05
##  [51] 6.221094e-06 2.561963e-05 7.277772e-05 6.254293e-05 7.354386e-05
##  [56] 4.947255e-05 7.104138e-05 6.168790e-05 6.448292e-05 3.890566e-05
##  [61] 7.269044e-05 8.605669e-06 1.868049e-05 7.338323e-05 3.033603e-06
##  [66] 7.100084e-05 5.525067e-05 2.959007e-05 4.825771e-05 7.245561e-05
##  [71] 4.562920e-05 7.393059e-05 6.827900e-05 7.001648e-05 3.062528e-05
##  [76] 5.217719e-05 4.329510e-05 2.994128e-05 5.233297e-05 6.381284e-05
##  [81] 6.696160e-05 7.383911e-05 6.818348e-05 4.359785e-05 7.222164e-05
##  [86] 1.097651e-05 1.448215e-05 7.131392e-05 6.508764e-05 7.358159e-05
##  [91] 3.718506e-05 6.924920e-05 6.976686e-05 7.442449e-05 7.369377e-05
##  [96] 4.718578e-05 7.188658e-05 2.258918e-06 7.174338e-05 6.748612e-05
## [101] 7.438672e-05 6.371174e-05 7.434069e-05 6.242573e-05 7.252392e-05
## [106] 1.360202e-05 7.362313e-05 5.149686e-05 6.081063e-05 7.381105e-05
## [111] 4.170294e-05 1.141554e-05 4.741025e-05 6.003718e-05 6.400840e-05
## [116] 7.335312e-05 3.835269e-05 6.344544e-05 4.447314e-05 4.500603e-05

En resumen, según los valores obtenidos, la distribución parece ser bastante simétrica (debido al sesgo cercano a cero), pero tiene colas más ligeras que las de una distribución normal, lo que indica una distribución platicúrtica. Sin embargo, es importante recordar que estos valores por sí solos no proporcionan una conclusión definitiva sobre la normalidad de la distribución

Actividad 2

Punto A

Se carga la información de la base de datos IMPORTANTE: Cambiar la ruta en la que tenga su archivo Blackfriday.xlsx en caso de que no la lea el archivo data <- data.frame(read_xlsx(“SU RUTA”))

data <- data.frame(read_xlsx("./Blackfriday.xlsx"))
### Se muestran dos formas de hacer el mismo procedimiento,
### primero, creando la función con los datos que se piden,
### segundo, usando una función que generá el nivel de confianza.

### PRIMERA FORMA DE GENERAR EL NIVEL DE CONFIANZA

### media = Media de la columna Purchase de los datos
data_purchase <- data$Purchase
media <- mean(data_purchase)

### z = Cuantil de la distribucion normal estandar
z <- 1.645

### nivel_confianza del 90% = 0.90
nivel_confianza <- 0.90

### n = La cantidad de datos en la columna Purchase
length(data$Purchase)
## [1] 47734
n <- length(data$Purchase)

### desviacion = desviacion estandar de la muestra
sd(data$Purchase)
## [1] 5001.657
desviacion <- sd(data$Purchase)

### error_estandar = Desviacion estandar de la muestra
error_estandar <- desviacion / sqrt(n)

### limite_inferior = Calculo del limite inferior
### limite_superior = Calculo del limite superior
limite_inferior <- media - (z * error_estandar)
limite_superior <- media + (z * error_estandar)

### Se muestra en un dataframe todos los datos
interval_m <- data.frame(n, media,nivel_confianza , desviacion, z, error_estandar, limite_inferior, limite_superior)
interval_conf <- data.frame(media, nivel_confianza, limite_inferior, limite_superior)
interval_conf
### SEGUNDA FORMA DE GENERAR EL NIVEL DE CONFIANZA
### Se hace uso de la función t.test()
res <- t.test(x = data$Purchase, conf.level = 0.90)
res
## 
##  One Sample t-test
## 
## data:  data$Purchase
## t = 415.34, df = 47733, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 90 percent confidence interval:
##  9470.603 9545.915
## sample estimates:
## mean of x 
##  9508.259

El intervalo de confianza al 90% para el promedio de la variable PURCHASE, se encuentra entre [9470.603, 9545.915].

Efectivamente la media poblacional cae en el intervalo, pues la media de la muestra es 9508.259 y el intervalo es [9470.603, 9545.915].

PUNTO B

Se muestran dos formas de hacer el mismo procedimiento, primero, creando la función con los datos que se piden, segundo, usando una función que generá el nivel de confianza.

### Volvemos a inicializar los datos
data <- data.frame(read_xlsx("./Blackfriday.xlsx"))

### Se muestran en la columna Purchase únicamente los valores > 5000
data <- data %>% filter(Purchase > 5000)

### media = Media de la columna Purchase de los datos
data_purchase <- data$Purchase
media <- mean(data_purchase)

### z = Cuantil de la distribucion normal estandar
z <- 1.960

### nivel_confianza del 95% = 0.95
nivel_confianza <- 0.95

### n = La cantidad de datos en la columna Purchase
length(data$Purchase)
## [1] 38915
n <- length(data$Purchase)

### desviacion = desviacion estandar de la muestra
sd(data$Purchase)
## [1] 3869.58
desviacion <- sd(data$Purchase)

### error_estandar = Desviacion estandar de la muestra
error_estandar <- desviacion / sqrt(n)

### limite_inferior = Calculo del limite inferior
### limite_superior = Calculo del limite superior
limite_inferior <- media - (z * error_estandar)
limite_superior <- media + (z * error_estandar)

### Cargar en un dataframe los datos necesarios para el calculo
interval_m <- data.frame(n,media,nivel_confianza,desviacion,z,error_estandar,limite_inferior,limite_superior)
interval_conf <- data.frame(media, nivel_confianza, limite_inferior, limite_superior)
interval_conf
### SEGUNDA FORMA DE GENERAR EL NIVEL DE CONFIANZA
### Se hace uso de la función t.test()
res <- t.test(x = data$Purchase, conf.level = 0.95)
res
## 
##  One Sample t-test
## 
## data:  data$Purchase
## t = 568.05, df = 38914, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  11104.31 11181.21
## sample estimates:
## mean of x 
##  11142.76

El intervalo de confianza al 95% para la proporcion de ventas superiores a US$5000 es de [11104.31, 11181.21]; además la proporcion poblacional se encuentra en este intervalo

Actividad 3

Punto A

La hipotesis nula se plantea como: u es menor o igual a el valor real encontrado en la población

La hipotesis alternativa se plantea como: u es mayor a el valor real encontrado en la población

#poblacion
media_poblacion
## [1] 9508.259
desviacion_Estandar_poblacion
## [1] 5001.657
#muestra
media_muestra
## [1] 9993.358
desviacion_Estandar_muestra
## [1] 5360.271
formz3A=(media_muestra-media_poblacion)/(desviacion_Estandar_muestra/sqrt(120))
pnorm(formz3A)
## [1] 0.8392467

El valor de 0.8392467 cae dentro de la región de aceptación de la hipotesis nula, por lo tanto se puede decir que el el valor u es menor o igual al valor real encontrado en la población, por lo tanto se puede decir que las personas compran menos que el valor promedio.

Punto B

muestraP3 <- subset(Blackfriday,select=c(Gender,Purchase))
#tamaño de la muestrs 120
n=120
#se extraen los datos de la población femenina
PoblacionF <- subset(muestraP3,Gender=="F")
muestraF <- sample(PoblacionF$Purchase,size=n,replace=FALSE,prob=NULL)
comprasPromF <- mean(PoblacionF$Purchase)
PromMuestraF <- mean(muestraF)
sdcompraspromF <- sd(PoblacionF$Purchase)
sdPromMuestraF <- sd(muestraF)
#se extraen los datos de la población masculina
PoblacionM <- subset(muestraP3,Gender=="M")
muestraM <- sample(PoblacionM$Purchase,size=n,replace=FALSE,prob=NULL)
ComprasPromM <- mean(PoblacionM$Purchase)
PromMMuestra <- mean(muestraM)
sdcompraspromM <- sd(PoblacionM$Purchase)
sdPromMuestraM <- sd(muestraM)

Creamos los filtros para las muestras de genero por Masculino y Femenino. En el dataframe se encuentran como masculino M y femenino F obtenemos tambien el promedio y la desviación estandar de cada muestra.

Estos son los datos para la poblacion y muestra Femenina

cat("La muestra femenina es:",muestraF)
## La muestra femenina es: 19585 11820 5711 15687 5760 17662 9739 12154 2162 5524 8144 14218 -6533 7345 6004 10925 6587 12333 12024 11175 5681 8092 26275 10968 8499 10111 7656 9297 8440 5260 6768 3118 11969 14942 3321 16712 12516 14705 6281 4084 6074 1551 5672 11589 17283 -686 11979 17168 6038 8050 11000 14631 4881 13287 12083 11961 13525 10523 11228 8125 10239 7708 12167 10099 2238 9024 -4069 14849 8848 -3589 11512 19068 10904 13933 15979 10782 12087 10340 10081 10379 10542 9888 7961 13875 6963 13181 14584 3184 20447 6354 12222 14277 7459 10165 12801 6705 20163 -256 12404 1125 10114 2709 4283 7616 6938 11770 8114 5185 18458 15281 8476 5341 11124 15717 11818 11353 7181 9250 8953 11983
#cat("La población femenina es:",PoblacionF$Purchase)
cat("\nEl promedio de la población femenina es:",comprasPromF)
## 
## El promedio de la población femenina es: 9506.636
cat("\nEl promedio de la muestra femenina es:",PromMuestraF)
## 
## El promedio de la muestra femenina es: 9724.75
cat("\nLa desviación estandar de la población femenina es:",sdcompraspromF)
## 
## La desviación estandar de la población femenina es: 5015.093
cat("\nLa desviación estandar de la muestra femenina es:",sdPromMuestraF)
## 
## La desviación estandar de la muestra femenina es: 5143.279

Estos son los datos para la poblacion y muestra Masculina

cat("La muestra masculina es:",muestraM)
## La muestra masculina es: 13761 9542 18549 7291 7885 11621 -3255 10942 5664 3690 16094 16187 7149 8163 19805 12102 10786 20167 2043 13292 11606 7998 22325 13350 14147 4973 15033 12940 14177 7140 9078 -6132 11285 9642 12721 7230 7760 3302 -4024 13315 12445 9032 4667 11504 21910 6618 16308 4778 9068 13766 5727 12590 2267 10286 9463 4863 3095 8510 1920 11168 12411 10219 18781 11732 5547 17999 276 13818 9902 5440 15703 284 14930 8469 18788 11799 12626 8546 5240 3315 4032 15500 10962 4678 1966 11138 8129 4886 6519 10431 1319 8490 17967 6900 10667 7827 13280 4672 3118 13915 4599 13031 7069 7708 9827 17951 9969 15105 2440 6191 2650 13621 4825 11108 10104 4556 6836 15406 13617 10223
#cat("La población femenina es:",PoblacionF$Purchase)
cat("\nEl promedio de la población masculina es:",ComprasPromM)
## 
## El promedio de la población masculina es: 9508.792
cat("\nEl promedio de la muestra masculina es:",PromMMuestra)
## 
## El promedio de la muestra masculina es: 9486.55
cat("\nLa desviación estandar de la población masculina es:",sdcompraspromM)
## 
## La desviación estandar de la población masculina es: 4997.311
cat("\nLa desviación estandar de la muestra masculina es:",sdPromMuestraM)
## 
## La desviación estandar de la muestra masculina es: 5376.969

La hipotesis que platearemos es si hay diferencia entre ambas poblaciones por lo tanto se plantea que H0:μ1-μ2 != media

la hipotesis alternativa se plantearia como H1:μ1-μ2 = media

z3B <- ((PromMMuestra-PromMuestraF))/(sqrt(((sdPromMuestraM*sdPromMuestraM)/120)+((sdPromMuestraF*sdPromMuestraF)/120)))
z3B
## [1] -0.3506827
pnorm(z3B)
## [1] 0.3629132

Con un nivel de significancia del 5% se puede decir que la diferencia entre el promedio de gastos masculino y el promedio de compras femenino es diferente por lo tanto la hipotesis H0 es correcta y se puede decir que la

Punto C

Calcularemos un intervalo de confianza de una cola para las varianzas de la muestra de compras masculino y femenino.

if (!require('devtools')) install.packages('devtools')
devtools::install_github('fhernanb/stests', force=TRUE)
## Downloading GitHub repo fhernanb/stests@HEAD
## 
## ── R CMD build ─────────────────────────────────────────────────────────────────
##   
  
  
   checking for file 'C:\Users\alejo\AppData\Local\Temp\Rtmp2nVTiy\remotes5d3066d43bc2\fhernanb-stests-61c62f1/DESCRIPTION' ...
  
✔  checking for file 'C:\Users\alejo\AppData\Local\Temp\Rtmp2nVTiy\remotes5d3066d43bc2\fhernanb-stests-61c62f1/DESCRIPTION'
## 
  
  
  
─  preparing 'stests': (837ms)
##    checking DESCRIPTION meta-information ...
  
✔  checking DESCRIPTION meta-information
## 
  
  
  
─  checking for LF line-endings in source and make files and shell scripts
## 
  
─  checking for empty or unneeded directories
##    Omitted 'LazyData' from DESCRIPTION
## 
  
  
  
─  building 'stests_0.1.0.tar.gz'
## 
  
   
## 
## Installing package into 'C:/Users/alejo/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
stests::var.test(c(sdcompraspromM,sdcompraspromF)) 
## 
##  X-squared test for variance
## 
## data:  c(sdcompraspromM, sdcompraspromF)
## X-squared = 158.11, df = 1, p-value < 2.2e-16
## alternative hypothesis: true variance is not equal to 1
## 95 percent confidence interval:
##      31.47096 160993.26013
## sample estimates:
## variance of x 
##      158.1065

Punto D

Tenemos como hipotenis nula que la igualdad de las varianzas de las compras de hombres y mujeres. H0:sμ1 = sμ2 como hipotesis alternativa se tiene que son diferentes. H1:sμ1 != sμ2

PruebaHipVarianzas <- ((sdcompraspromM*sdcompraspromM)/(sdcompraspromF*sdcompraspromF))

PruebaHipVarianzas
## [1] 0.992921
gradosLibertad <- 119/119

valorCritico <- 1.35
valorCritico
## [1] 1.35

Con los valores del valor critico que equivale a 1.35 y el valor del estadistico de prueba equivale a 0.99291 se concluye que como el estadistico es menor que el valor critico se rechaza la hipotesis nula. Por lo tanto la hipotesis alternativa es verdadera entonces la varianza de ambos son diferentes